package com.itcast.clientx;

/**
 * 1.
 * 适当覆盖 Object 类方法，包括覆盖 toString 并在适当时提供静态 valueOf 方法
 *  基于接口的层次结构设计、通过接口编程和后期绑定
 *  使用工厂来控制对象的实例化，包括保证唯一实例的实例化
 *  防御性编程，包括使用不变性
 *  使用 Collections 框架中的适当接口和类
 *  适当使用 Javadoc 来记录您的接口和类
 *  测试的使用
 *
 * 2.
 * 卡车租赁公司需要一组接口和类来管理卡车租赁。
 * 该公司从其 20 辆小型卡车和 10 辆大型卡车的车队中租用卡车。对于本课程，小型卡车和大型卡车之间的显着区别在于它们以不同的速度消耗燃料（参见第 3 节）。
 * 当所有特定类型的卡车都已租出后，公司将无法再发放该类型的卡车，直到其中一辆租用的卡车归还为止。
 * 一辆卡车一次只能出租给一个人。因此，要出租的卡车在归还并且现有租赁合同终止之前不能再次出租。卡车归还后，可以再次出租。表达这种保证的另一种方式是，未租用或已归还的卡车无法驾驶（它被“停用”）。也就是说，任何给定卡车的状态要么出租给一个人（在这种情况下可以驾驶），要么不出租（在这种情况下不能）。
 * 一个人一次只能出租一辆卡车。
 * 租赁公司需要保留谁租过给定卡车的记录（将某人与他们租用的卡车相关联）。此外，他们需要能够出租卡车并在卡车归还时终止租赁合同。
 * 他们还需要有关目前出租的卡车的信息。以下提供了有关所需功能的更多详细信息：
 * availableTrucks(typeOfTruck)
 * 此方法返回可出租的指定类型卡车的数量。
 * getRentedTrucks()
 * 此方法返回当前出租的所有卡车（如果有）的集合。
 * getTruck(person)
 * 给定一个人，此方法返回他们当前租用的卡车（如果有）。
 * issueTruck(person, drivingLicence, typeOfTruck)
 * 给定一个人（出租人）、该人的驾驶执照和所需卡车类型（小型或大型）的规格，此方法确定该人是否有资格租用指定类型的卡车，如果有可用的卡车, 发出指定类型的卡车。
 * 租赁开始时，卡车的油箱装满了汽油。该方法将卡车与租用它的人相关联（以便公司有卡车出租和租用它们的人的记录）。
 * 如果无法发出卡车，则该方法返回未能发出卡车的适当指示。请注意，这不必说明为什么不能发出卡车；它只是表明不能发出卡车。
 * 确定是否可以发出卡车的规则如下：
 *  租用卡车的人必须拥有完整的驾驶执照
 *  他们一次不能租超过一辆卡车
 *  租一辆小卡车，他们必须至少年满 20 岁，并且必须持有至少 1 年的执照
 *  租一辆大卡车，他们必须年满 25 岁，并且必须持有至少 5 年的执照
 * terminateRental(person)
 * 此方法终止给定人员的租赁合同。 实际上，此人正在归还卡车。 然后卡车可以由其他人租用。
 * 该方法从公司的记录中删除租赁记录（将卡车与人分离）并返回填充卡车油箱所需的以升为单位的燃料量。
 * 归还卡车的人必须将装满油箱的卡车归还，或者对加满油箱所需的升数负责。 此终止租赁方法不负责管理所需燃料的费用。
 * 它只报告填充油箱所需的燃料量。 如果一个人试图终止一个不存在的合同，这个方法什么也不做。
 * 注意：您可以假设租用卡车的人拥有除燃料外的所有租赁费用的预付凭证。 您不关心凭证的管理。
 *
 * 3.
 * 要完成第 2 节中概述的卡车租赁系统，您需要为本节中描述的功能提供接口和类。您还必须实现测试类来对您的解决方案进行单元测试。
 * 卡车
 * 所有卡车都具有以下功能：
 *  一种获取卡车注册号的方法
 *  一种获取卡车油箱总升容量的方法
 *  一种获取当前油箱中整升燃油量的方法
 *  一种指示卡车油箱是否已满的方法
 *  一种将给定数量的整升加到油箱中的方法（最多到油箱的容量），并在执行后指示添加到油箱中的燃油量
 *  一种在给定的整公里数内“驾驶”卡车的方法，该方法返回旅途中消耗的整升燃料的数量
 * 以下规则决定了驱动方法（以及获取卡车油箱容量的方法）的含义和功能。
 *  如果当前未租用卡车，则不能驾驶。
 *  如果卡车油箱中的燃料为 0 升或更少，则不能驾驶卡车。
 *  一辆小型卡车以 20 公里/升的速度消耗燃料。
 *  一辆大型卡车在旅程的前 50 公里以 10 公里/升的速度消耗燃料，然后在旅程的其余部分以 15 公里/升的速度消耗燃料。
 *  drive 方法计算旅途中消耗的燃料量，从油箱中的燃料中减去该量，然后返回消耗的燃料量。如果卡车无法驾驶，该方法应提供适当的指示，表明尚未进行任何行程。
 *  小型卡车的油箱容量为 49 升。
 *  一辆大型卡车的油箱容量为 60 升。
 * 为了显着降低计算的复杂性，您可以应用以下对现实世界的简化。
 *  所有行程要么是 0 公里（卡车无法驾驶），要么是指定为驾驶方法参数的完整距离。
 *  允许单程消耗比油箱中可用的燃料更多的燃料。因此，在旅程结束时，油箱中的燃料可能为负数。如上所述，当卡车的油箱是空的（或少于空的！）时，不能驾驶卡车。
 * 这意味着当油箱的可用容量为 0 升或更少时，无法开始旅程。在开始旅程之前，必须添加更多燃料。
 *  所有计算均针对整升和整公里。在计算中使用整数算法。在现实世界中需要消耗部分升的任何旅程，在这种驾驶模式中都需要消耗额外的一升。因此，
 * 例如，一辆小型卡车在 1、10、15、19 或 20 公里的旅程中将消耗 1 升。
 * 您必须为卡车提供适当的层次结构。您的卡车租赁类别应要求（并根据第 2 节中规定的规则）发放适当类型的卡车。
 *
 * 卡车登记号Truck registration number
 * 卡车登记号有两个组成部分。 第一个组成部分是两个字母后跟两个数字。 第二个组成部分是三个字母。 例如：
 *  NG57 HXE
 * 您必须提供对每个组件的访问权限以及注册号的适当字符串表示。
 * 注册号是唯一的。 您必须保证没有两辆卡车具有相同的注册号。
 *
 * 个人/客户Persons/Customers
 * 一个人（或客户）有姓名和出生日期。
 * 姓名由一个人的名字和姓氏组成。
 * 您应该使用 java.util.Date 作为出生日期。 您不得使用 Date 类的已弃用方法。 因此，在您的测试类中，您应该使用 java.util.Calendar 来构造出生日期。 您可以假设默认时区和语言环境。
 * 您必须提供访问某人姓名和出生日期的方法。
 * 如果两个人的姓名和出生日期相同，则认为他们是同一个人。
 *
 * 驾驶执照Persons/Customers
 * 驾驶执照具有唯一编号、颁发日期（由 java.util.Date 类表示）以及该执照是否为正式驾驶执照的指示。
 * 许可证号由三个部分组成。第一个组件是驱动程序名字的首字母与驱动程序姓氏的首字母的串联。第二个组成部分是许可证颁发的年份。第三个组成部分是一个任意的序列号。例如，1990 年发给 Mark Smith 的许可证的许可证号的字符串表示形式为：
 *  MS-1990-10
 * 其中 10 是一个序列号，带有首字母和年份，保证了许可证号作为一个整体的唯一性。
 * 您必须决定是否为许可证编号定义单独的类别。无论您是否这样做，您都必须提供对许可证编号的各个组成部分及其字符串表示的访问权限。
 * 您必须保证许可证号的唯一性。
 * 您的驾照必须提供获取驾照编号、驾照签发日期以及是否为正式驾照的方法。
 *
 * 4.
 * 您的解决方案应该包括您的接口和类，这些接口和类构成了第 2 节和第 3 节中概述的系统和类型的实现。您必须使用适当的 Javadoc 注释您的代码。
 * 此外，您应该提供单独的单元测试类来演示对您的解决方案的彻底测试。
 * 此外，编写一份文档（MS Word 或 PDF）来解释您的整体设计的结构。
 * 该文档应该有一张图片，其中包含所有类和接口的 UML 图以及它们由带注释的箭头（扩展、实现、使用）描述的关系。
 * 对于每个类和接口,UML 图应该显示类/接口名称、字段和方法（在适当的地方）。
 * 此外，每个图都应该表明它是一个类、抽象类还是一个接口。
 */
public class Require {

}
